#include <cmath>
#include <cstdint>
#include <iostream>
#include <utility>
#include <vector>

using ll = int64_t;
using std::cin,std::cout;

const ll maxn=500000+5;
constexpr ll L = 20;
ll n,m,s, fa[maxn][L],dpt[maxn];
std::vector<ll> adj[maxn];

void dfs(const ll &fth,const ll &u){
    fa[u][0]=fth;
    for(auto &v:adj[u]){
        if(v!=fth){
            dpt[v]=dpt[u]+1;
            dfs(u,v);
        }
    }
}

void initat(){
    for(ll k{1};k<L;++k){
        for(ll u{1};u<=n;++u){
            fa[u][k]=fa[fa[u][k-1]][k-1];
        }
    }
}

ll lca(ll u,ll v){
    if(dpt[u]<dpt[v]){
        std::swap(u,v);
    }
    ll tmp{dpt[u]-dpt[v]};
    for(ll j{0};tmp;j++,tmp>>=1){
        if(tmp&1){
            u=fa[u][j];
        }
    }
    if(u==v)return u;
    for(ll j{L-1};j>=0;j--){
        if(fa[u][j]!=fa[v][j]){
            u=fa[u][j];
            v=fa[v][j];
        }
    }
    return fa[u][0];
    
}

int main(){
    std::iostream::sync_with_stdio(false),std::cin.tie(nullptr),std::cout.tie(nullptr);
    cin>>n>>m>>s;
    for(ll i{1};i<n;i++){
        ll u,v;
        cin>>u>>v;
        adj[u].emplace_back(v);
        adj[v].emplace_back(u);
    }
    dfs(0,s);
    initat();
    while(m--){
        ll u,v;
        cin>>u>>v;
        cout<<lca(u,v)<<'\n';
    }
}